package com.ktg.mes.wm.service;

import java.util.List;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ktg.mes.pro.domain.ProTask;
import com.ktg.mes.unit.other.ZLService;
import com.ktg.mes.util.LService;
import com.ktg.common.core.domain.model.SqlResult;
import com.ktg.mes.wm.domain.WmItemRecptLine;
import com.ktg.mes.wm.domain.WmRtIssueLine;

/**
 * 物料入库单行Service接口
 *
 * @author yinjinlu
 * @date 2022-05-22
 */
public interface IWmItemRecptLineService  extends ZLService<WmItemRecptLine>
{
    /**
     * 查询物料入库单行
     *
     * @param lineId 物料入库单行主键
     * @return 物料入库单行
     */
    public WmItemRecptLine selectWmItemRecptLineByLineId(Long lineId);

    /**
     * 查询物料入库单行列表
     *
     * @param wmItemRecptLine 物料入库单行
     * @return 物料入库单行集合
     */
    public List<WmItemRecptLine> selectWmItemRecptLineList(WmItemRecptLine wmItemRecptLine);

    /**
     * 新增物料入库单行
     *
     * @param wmItemRecptLine 物料入库单行
     * @return 结果
     */
    public SqlResult addWmItemRecptLine(WmItemRecptLine wmItemRecptLine);

    /**
     * 修改物料入库单行
     *
     * @param wmItemRecptLine 物料入库单行
     * @return 结果
     */
    public SqlResult updateWmItemRecptLine(WmItemRecptLine wmItemRecptLine);

    /**
     * 批量删除物料入库单行
     *
     * @param lineIds 需要删除的物料入库单行主键集合
     * @return 结果
     */
    public SqlResult deleteWmItemRecptLineByLineIds(Long[] lineIds);

    /**
     * 删除物料入库单行信息
     *
     * @param lineId 物料入库单行主键
     * @return 结果
     */
    public SqlResult deleteWmItemRecptLineByLineId(Long lineId);

    /**
     * 删除物料入库单下所有行信息
     * @param recptId
     * @return
     */
    public SqlResult deleteByRecptId(Long recptId);

    /**
     * 通过生产退料检测一条入库信息
     * @param issueLine
     */
    public  WmItemRecptLine createRecptLineFromWmRtIssueLine(WmRtIssueLine issueLine);


    /**
     * 同步库存
     */
    public void sysnStock();

    /**
     * 查询排产任务taskId 已入库数量,排产数量
     * @param taskId
     * @return
     */
    public List<JSONObject> findTaskQuantityAndItemRecptLineQuantity(WmItemRecptLine taskId);


    /**
     * 排产任务产品入库  关联 排产任务,和预出库 逻辑
     * @param wmItemRecptLine
     * @param canNullTask
     * @return
     */
    public SqlResult inPutRelationProstaskAndWillOut(WmItemRecptLine wmItemRecptLine, ProTask canNullTask);




    /**
     * 更新产品入库的出库数量
     * @param lineId
     */
    public void updateItemRecptLineOutQuantity(Long lineId);

    IPage<WmItemRecptLine> findList(Page page, WmItemRecptLine wmItemRecptLine);
}
